#ifndef CMD_TASK_H
#define CMD_TASK_H
#include<my_header.h>
#include "l8w8jwt/encode.h" 
#include "l8w8jwt/decode.h"
//#define server_dir "/home/ubuntu/Wp/text"
#define MAX_FILE_SIZE 1024

// 命令解析 
typedef enum {
	CMD_TYPE_INIT = -1,
	CMD_TYPE_CD = 1,
	CMD_TYPE_LS,
	CMD_TYPE_PWD,
	CMD_TYPE_MKDIR,
	CMD_TYPE_RMDIR,
	CMD_TYPE_REMOVE,
	CMD_TYPE_PUTS,
	CMD_TYPE_GETS,
	// 无效命令
  CMD_TYPE_NOTCMD
} CmdType;

// 小火车任务协议
typedef struct train_s{
   // 任务的类型
   CmdType _cmdType;
   // 传输的长度
   int _trainLen;
   //传输的内容
   char _data[1024];
}train_t;

  // 任务的结构体
typedef struct task_S{
    // 传输的netfd
    int _netfd;
    // 小火车
    train_t _train;
    // 传输的路径
    char *_dir[1024];
}task_t;

typedef struct main_thread_resource_s{
  int netfd[1024];
  int netfd_count;
}main_thread_resource_t;

//判断新旧客户端连接的结构体
typedef struct accept_info_s{
  int is_new;//0是新客户端，1是读写子线程=
  char username[1024];//用户名
  //加密结构体
  char jwt[4096];
  size_t jwt_length;
}accept_info_t;

//初始化主线程资源
int init_main_thread_resource(main_thread_resource_t *main_thread_resource);

// 添加netfd到主资源结构体中
int add_netfd_to_resource(main_thread_resource_t *main_thread_resource,int netfd);

// 初始化任务
task_t* task_init(int netfd);

//初始化连接结构体
int init_accept_info(accept_info_t * info);

//判断长短命令（返回0是短命令，1是长命令,-1是无效命令）
int judge_cmd_type(train_t *train);


// 工作线程处理客户端的各种任务()
void client_thread_long(void *arg);
// 短命令线程
void client_thread_short(void *arg);

// 处理cd命令
int handle_cd( );

//处理pwd命令
int handle_pwd();

// 处理ls命令只支持ls当前目录
int handle_ls();

// 处理创建文件夹
int handle_mkdir();

// 删除文件夹
int handle_rmdir();

//删除文件
int handle_remove();

// 客户端上传文件
int handle_puts();

//客户端下载文件
int handle_gets();






   
    


#endif
